package com.tjcd.project.library_base.common.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.serializer.SerializerFeature;

import java.util.List;
import java.util.Map;

/**
 * @Author jiangKunKun
 * @CreateDate 2025/2/17
 * @Description
 * @SpittingGrooves
 */
public class FastJsonUtils {
    /**
     * 将对象转换为JSON字符串
     *
     * @param object 对象
     * @return JSON字符串
     */
    public static String toJSONString(Object object) {
        return JSON.toJSONString(object, SerializerFeature.WriteMapNullValue);
    }

    /**
     * 将对象转换为JSON字符串，并格式化输出
     *
     * @param object 对象
     * @return 格式化后的JSON字符串
     */
    public static String toPrettyJSONString(Object object) {
        return JSON.toJSONString(object, SerializerFeature.PrettyFormat, SerializerFeature.WriteMapNullValue);
    }

    /**
     * 将JSON字符串转换为指定类型的对象
     *
     * @param jsonString JSON字符串
     * @param clazz      目标对象类型
     * @param <T>        泛型类型
     * @return 指定类型的对象
     */
    public static <T> T parseObject(String jsonString, Class<T> clazz) {
        return JSON.parseObject(jsonString, clazz);
    }

    /**
     * 将JSON字符串转换为指定类型的对象（支持泛型）
     *
     * @param jsonString    JSON字符串
     * @param typeReference 目标对象类型引用
     * @param <T>           泛型类型
     * @return 指定类型的对象
     */
    public static <T> T parseObject(String jsonString, TypeReference<T> typeReference) {
        return JSON.parseObject(jsonString, typeReference);
    }

    /**
     * 将JSON字符串转换为Map对象
     *
     * @param jsonString JSON字符串
     * @return Map对象
     */
    public static Map<String, Object> parseToMap(String jsonString) {
        return JSON.parseObject(jsonString, Map.class);
    }

    /**
     * 将JSON字符串转换为List对象
     *
     * @param jsonString JSON字符串
     * @param clazz      List中元素的类型
     * @param <T>        泛型类型
     * @return List对象
     */
    public static <T> List<T> parseArray(String jsonString, Class<T> clazz) {
        return JSON.parseArray(jsonString, clazz);
    }

    /**
     * 将对象转换为JSON字符串，并排除null值
     *
     * @param object 对象
     * @return JSON字符串
     */
    public static String toJSONStringWithoutNull(Object object) {
        return JSON.toJSONString(object);
    }

    /**
     * 将对象转换为JSON字符串，并排除null值，格式化输出
     *
     * @param object 对象
     * @return 格式化后的JSON字符串
     */
    public static String toPrettyJSONStringWithoutNull(Object object) {
        return JSON.toJSONString(object, SerializerFeature.PrettyFormat);
    }
}
